package com.project.common.core.page;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.project.common.utils.collection.CollectionsUtils;

import java.util.List;

/**
 * @author WangYan
 * @description:
 * @date 2022/10/15 15:12
 */
public class PageUtils extends Pager {

    public static <T> Pager toEmptyPage() {
        return toPage(1, 0, 0, Lists.newArrayList());
    }

    public static <T> Pager toPage(List<T> data) {
        if (CollectionsUtils.isEmpty(data)){
            return toEmptyPage();
        }
        if (!(data instanceof Page)) {
            throw new RuntimeException("分页数据类型不对！");
        }
        PageInfo<T> pageInfo = new PageInfo<T>(data);

        Pager<T> pager = new Pager<T>();
        pager.setPageNum(pageInfo.getPageSize());
        pager.setPageSize(pageInfo.getPageNum());
        pager.setTotal((int) pageInfo.getTotal());
        pager.setRows(pageInfo.getList());
        return pager;
    }

    /**
     * 应对特殊情况
     * page ： 包含分页数据
     * data ： 具体的数据
     *
     * @Author WangYan
     * @Date 2021/11/5 11:06
     */
    public static <T> Pager toPage(List page, List<T> data) {
        if (CollectionsUtils.isEmpty(data)){
            return toEmptyPage();
        }
        if (!(page instanceof Page)) {
            throw new RuntimeException("分页数据类型不对！可能是顺序放反了！");
        }
        PageInfo pageInfo = new PageInfo(page);
        Pager<T> pager = new Pager<T>();
        pager.setPageNum(pageInfo.getPageSize());
        pager.setPageSize(pageInfo.getPageNum());
        pager.setTotal((int) pageInfo.getTotal());
        pager.setRows(data);
        return pager;
    }

    /**
     * 应对特殊情况
     * page ： 包含分页数据
     * data ： 具体的数据
     *
     * @Author WangYan
     * @Date 2021/11/5 11:06
     */
    public static <T> Pager toPage(int pageNum, int pageSize, int totalCount, List<T> data) {
        Pager<T> pager = new Pager<T>();
        pager.setPageNum(pageNum);
        pager.setPageSize(pageSize);
        pager.setTotal(totalCount);
        pager.setRows(data);
        return pager;
    }

}
